cmake_minimum_required(VERSION 3.10)
project(C01Primary)

# 生成 compile_commands.json
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

# 启用测试功能
enable_testing()

# 查找库文件
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/src LIB_SOURCES)

# 添加库目标
add_library(mylib SHARED ${LIB_SOURCES})

# 包含头文件目录
target_include_directories(mylib PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/src)

#测试用的公共文件
set(ALLOC_TESTING ${CMAKE_CURRENT_SOURCE_DIR}/test/alloc-testing.c)
set(FRAMEWORK ${CMAKE_CURRENT_SOURCE_DIR}/test/framework.c)

#将测试用的公共文件编译为一个库
add_library(testlib SHARED ${ALLOC_TESTING} ${FRAMEWORK})

# 查找测试文件
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/test TEST_SOURCES)

#从TEST_SOURCES中删除两个公共文件
list(REMOVE_ITEM TEST_SOURCES ${ALLOC_TESTING} ${FRAMEWORK})

# 遍历测试文件，为每个测试文件创建一个可执行文件
foreach(TEST_SOURCE ${TEST_SOURCES})
    get_filename_component(TEST_NAME ${TEST_SOURCE} NAME_WE)
    add_executable(${TEST_NAME} ${TEST_SOURCE})
    target_link_libraries(${TEST_NAME} mylib testlib)
    target_include_directories(${TEST_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/test ${CMAKE_CURRENT_SOURCE_DIR}/src)
    # 添加测试（编译完成后，执行ctest命令将自动发现并运行所有添加的测试，并显示测试结果。）
    add_test(NAME ${TEST_NAME} COMMAND ${TEST_NAME})
endforeach()